home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Monster Media 1996 #15
/
Monster Media Number 15 (Monster Media)(July 1996).ISO
/
prog_c
/
kbstf10.zip
/
README.TXT
< prev
next >
Wrap
Text File
|
1996-04-03
|
12KB
|
264 lines
The file kbstf10.zip contains some keyboard utilities by Luigi Mancinelli.
KBSTUFF.C
KBSTUFF.COM
KBSTUFFR.C
KBSTUFFR.COM
SEEKBBUF.C
SEEKBBUF.COM
KBSTFRES\KBSTFRES.ASM
KBSTFRES\KBSTFRES.COM
DISKBD\DISKBD.ASM
DISKBD\DISKBD.COM
DISKBD\UNINSTKL.C
DISKBD\UNINSTKL.COM
KBRESDIS\KBRESDIS.ASM
KBRESDIS\KBRESDIS.COM
KBRESDIS\KBDOSRES.C
KBRESDIS\KBDOSRES.COM
README.TXT -- This file
The C sources are written for Borland Turbo C 2.0 and could require even
a lot of work to be compiled with different versions of C. They are plain C
and maybe could be easily translated in assembler, because they don't use
tipical C functions.
The asm programs are written to be assembled with the exclusive use of the
DOS Debug and they are not easily converted to masm sources. The shareware
program A86 of Eric Isaacson can be used instead.
The philosophy I've adopted is to create very short TSRs, with a minimal
initialization code, and to delegate the most of work to C programs that
communicate with the TSRs. This is possible complying, for TSRs that trap
interrupts, with the IBM's INTERRUPT sharing protocol.
Thanks a lot to Chris Dunford for posting informations about IBM's
INTERRUPT-SHARING PROTOCOL.
+++++++++++++++++++++++++
SEEKBBUF.C - SEEKBBUF.COM
This program can be used to inspect the keyboard buffer used by the
the standard INT 9h handler, which is a circular buffer of 2-bytes
words.
The buffer must reside in the BIOS data segment (040h:0). At offset
80h must be found the offset of the first byte of the buffer, at 82h
there should be the offset of the first byte after the buffer. This
should be standard,but could happen that old BIOSes don't comply with
this.
Syntax:
SEEKBBUF
Press <ESC> to exit from program.
(c) 1996 by Luigi Mancinelli
manci@alpha.science.unitn.it
+++++++++++++++++++++++
KBSTUFF.C - KBSTUFF.COM
This program stuffs the standard keyboard buffer, which is a circu-
lar buffer of 2-bytes words.
This 2-bytes words are in general formed by the ASCII translation in
the low byte and the scan code in the high byte. Extended characters
could have an ASCII translation of 0 or E0 (for the extended 101/102
keys keyboards) or F0 (other extended chars). You can inspect keys
stored in the keyboard buffer from the standard INT 9h handler with
the program SEEKBBUF.COM (with Turbo-c source).
The way to use KBSTUFF is simple for c programmers.
syntax:
KBSTUFF [/R] <what to stuff>
/R Option. If present must be the first parameter, other-
wise is interpreted as two characters to store.
Reset the keyboard's buffer.
<what to stuff> are the characters to store in the buffer.
Blanks and tabs are generally skipped, but you can use
a C-type string, as, for example,
"pippo a:\r"
"\r\n\t\aError in C:\\work\r\n"
"\76\xFDThis are octal and hexadecimal notation\?"
\OOO and \xHHH are accepted as for ANSI C, but if the
value of FFh is exceeded only the low byte is conside-
red and the high is stripped.
With this "normal" use only ASCII translation are sto-
red, without scan code, as the keys would have been ge-
nerated with the ALT-key+Keypad numbers combination.
My extensions to C-string allow to store extended keys
with a low byte of 0.
To store the word 6800h, for example, many methods can
be used:
"\0\x68","\ex68" (where the escape sequence \e is an
extension to the standard C-string syntax), "\0h" or
"\eh" (where ascii('h')=0x68)
The x is used as an escape character for the \e escape
sequence, so if 7800h(=<ALT 1>) has to be stored can be
used:
"\ex78","\0\x78","\0x" or "\exx"
(c) 1996 by Luigi Mancinelli
manci@alpha.science.unitn.it
Note: If the program has to be recompiled, the tiny model has to be
used and the resulting .exe has to be converted in .com (with the DOS
utility EXE2BIN for example) or the program doesn't work.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
KBSTUFFR.C - KBSTUFFR.COM == KBSTFRES.ASM - KBSTFRES.COM
The little assembly TSR KBSTFRES.COM hooks INT 1Ch (user interrupt),
complying with IBM's INTERRUPT-SHARING PROTOCOL and stuffs the key-
board buffer with the 2-bytes words it finds in his internal buffer.
This 2-bytes words are in general formed by the ASCII translation in
the low byte and the scan code in the high byte. Extended characters
could have an ASCII translation of 0 or E0 (for the extended 101/102
keys keyboards) or F0 (other extended chars). You can inspect keys
stored in the keyboard buffer from the standard INT 9h handler with
the program SEEKBBUF.COM (with Turbo-c source).
A word with value 0 shouldn't never be generated by standard INT 9h
handler and so the TSR interprets a 0 in his buffer as a request of a
pause, and the following word represent for it the number of clock-
ticks to wait. A 0 as number of ticks is interpreted as 65536.
Even a word with the high byte equals to 0xFF should never be gene-
rated by the standard INT 9h handler and so the TSR interprets this
as a "short pause", the low byte representing the number of thicks, 0
interpreted again as 65536.
The KBSTFRES.COM's buffer is a circular buffer similarly to the key-
board buffer, but it's bigger and could be made even bigger, alloca-
ting memory, even if the TSR is already installed.
The KBSTFRES.COM's companion program KBSTUFFR.COM is used to store
keys in the TSR's buffer. It could be even used as a scheme for ad-
ding other options as allocating another buffer.
The way to use KBSTUFFR is simple for c programmers.
syntax:
KBSTUFFR [/R] [/U] [/G] [/S] <what to stuff>
/R Option. If present must be the first parameter, other-
wise is interpreted as two characters to store.
Reset the TSR's buffer.
/U Option. If present must be the first parameter, other-
wise is interpreted as two characters to store.
Whatever follow this option is obviously ignored.
Uninstall the TSR and remove it from memory.
/R and /U options are mutually excluding. Both must be the
first option. The use of both is, however, a nonsense.
/S Stops the TSR. |_ Can appear anywhere outside of
/G Restarts the TSR. | C-strings
<what to stuff> are the characters to store in the buffer.
Blanks and tabs are generally skipped, but you can use
a C-type string, as, for example,
"pippo a:\r"
"\r\n\t\aError in C:\\work\r\n"
"\76\xFDThis are octal and hexadecimal notation\?"
\OOO and \xHHH are accepted as for ANSI C, but if the
value of FFh is exceeded only the low byte is conside-
red and the high is stripped.
With this "normal" use only ASCII translation are sto-
red, without scan code, as the keys would have been ge-
nerated with the ALT-key+Keypad numbers combination.
My extensions to C-string allow to store extended keys
with a low byte of 0 and special pause sequences.
To store the word 6800h, for example, many methods can
be used:
"\0\x68","\ex68" (where the escape sequence \e is an
extension to the standard C-string syntax), "\0h" or
"\eh" (where ascii('h')=0x68)
The x is used as an escape character for the \e escape
sequence, so if 7800h(=<ALT 1>) has to be stored can be
used:
"\ex78","\0\x78","\0x" or "\exx"
To store a pause, the other extension "\pDDDDD" has to
be used where DDDDD is a decimal number. If only "\p"
or "\p0" is entered the pause is set to the default of
1 clock-tick.
(c) 1996 by Luigi Mancinelli
manci@alpha.science.unitn.it
Note: If the program has to be recompiled, the tiny model has to be
used and the resulting .exe has to be converted in .com (with the DOS
utility EXE2BIN for example) or the program doesn't work.
++++++++++++++++++++++++++++++++++++++++++++++++++++
UNINSTKL.C - UNINSTKL.COM == DISKBD.ASM - DISKBD.COM
The little assembly TSR DISKBD.COM hooks INT 09h (keyb. interrupt),
complying with IBM's INTERRUPT-SHARING PROTOCOL and disables the key-
board accepting only the combination <CTRL><ALT><LEFT SHIFT><SPACE>,
which allows to toggle between keyboard enabled and disabled.
Why one could use a similar program? For example to disable keyboard
during execution of batch file, or when a keyboard stuffer, like the
combination of KBSTFRES.COM and KBSTUFFR, is used and the user input
is desired to be temporarily disabled. In both cases disabling and
enabling keyboard should be possible from a batch file to be really
useful.
This is what this program does, allowing to change the state of the
previously loaded TSR and even to uninstalling it (supposing that no
not IBM's ISP compliant TSR are loaded after it).
syntax:
UNINSTKL /U uninstall DISKBD.COM TSR from interrupt chain of inter-
rupt 09h and remove it from memory.
UNINSTKL /E enable keyboard.
UNINSTKL /D disable keyboard.
(c) 1996 by Luigi Mancinelli
manci@alpha.science.unitn.it
Note: If the program has to be recompiled, the tiny model has to be
used and the resulting .exe has to be converted in .com (with the DOS
utility EXE2BIN for example) or the program doesn't work.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
KBDOSRES.C - KBDOSRES.COM == KBRESDIS.ASM - KBRESDIS.COM
The little assembly TSR KBRESDIS.COM hooks INT 21h (dos functions),
complying with IBM's INTERRUPT-SHARING PROTOCOL, and traps the dos
function AH=0Ch, function that resets the keyboard and, eventually,
call a keyboard function. Many programs use this to prevent charac-
ters stored in the keyboard buffer are used and to force a wait for a
user input. For example dos format does it when asks user to confirm
an hard disk format request.
When you are creating complex batch files that use keyboard buffer
stuffing this could be useful.
The companion program KBDOSRES allows to toggle the state of the TSR
between "trap" and "don't trap" and allows to uninstall the TSR too.
syntax:
KBSTUFFR /U uninstalls the TSR.
KBSTUFFR /P[0|1] disables trapping (0) or enables it (1 and default)
(c) 1996 by Luigi Mancinelli
manci@alpha.science.unitn.it
Note: If the program has to be recompiled, the tiny model has to be
used and the resulting .exe has to be converted in .com (with the DOS
utility EXE2BIN for example) or the program doesn't work.
===========================================================================
LICENCE
-------
The files here included can be freely distributed, provided
that they're distributed together, without stripping copyright
informations and without any change (I'd like to get blame for
my own errors and credit only where it is due - as Chris Dun-
ford says). Commercial use couldn't be done without contact
the author.
(c) 1996 by Luigi Mancinelli
E-Mail: manci@alpha.science.unitn.it
Post :
Luigi Mancinelli
c/o Laboratori Didattici
Facoltà di Scienze
Università degli Studi di Trento
38050 POVO-TRENTO (TN)
ITALY